Reglas secuenciadas
En esta sección:
Sobre las reglas secuenciadas
Las reglas secuenciadas permiten la creación de reglas personalizadas mediante Windows PowerShell o VB Scripts. El éxito o fracaso de la secuencia determina si el nivel de seguridad, los elementos permitidos y los elementos denegados forman parte de la regla que se aplica al usuario.
Las reglas programadas pueden aprovechar cualquier interfaz accesible a través de PowerShell o VBScript, como COM (Modelo del objeto de componentes).
Cada secuencia se evalúa con las circunstancias siguientes:
- Cuando se despliega una nueva configuración en el equipo.
- Cuando un usuario inicia sesión.
Para crear o editar secuencias vaya al Conjunto de reglas secuenciadas requerido del Editor de configuración de Control de aplicaciones. Conjuntos de reglas > Secuenciado > [Nombre del conjunto de reglas]
Puede definir cuándo se va a ejecutar la secuencia mediante las siguientes opciones de Regla secuenciada:
- Ejecutar secuencia:
- Por sesión como usuario: la secuencia se ejecuta para cada usuario que inicie sesión. La configuración solo se aplica por la duración de la sesión del usuario.
- Por sesión como SISTEMA: la secuencia se ejecuta con los permisos de la cuenta SISTEMA una vez para cada inicio de sesión de usuario. La configuración solo se aplica por la duración de la sesión del usuario.
- Por equipo como SISTEMA: la secuencia se ejecuta con permiso de cuenta SISTEMA al iniciarse el equipo. La configuración se aplica a todas las sesiones de usuarios hasta que se reinicia el equipo, el agente de Control de aplicaciones se reinicia o hay un cambio de configuración.
- Esperar a que se complete el inicio de sesión: seleccionar para evitar que se ejecute la secuencia hasta que se haya completado el inicio de sesión del usuario.
Precaución: ejecutar secuencias como usuario del SISTEMA puede provocar daños serios en su equipo y solo deberán habilitarlas los autores de secuencias experimentados.
VBScripts
Cada secuencia se ejecuta en un motor de secuencias alojado, lo que proporciona un mayor control sobre la ejecución de secuencias a la vez que proporciona un mayor grado de control de entrada y salida.
- No se usa ningún archivo VBS.
- No se generan procesos separados.
Una secuencia debe tener escrita una función y puede contener muchas funciones, pero se debe especificar una función de inicio principal. El agente de Control de aplicaciones ejecuta una función de inicio y puede usarse para llamar a otras funciones.
El objeto COM de AMScriptRule se genera en el motor de secuenciación y proporciona acceso a los métodos siguientes:
strUsername = AMScriptRule.UserName
strUserdomain = AMScriptRule.UserDomain
strSessionid = AMScriptRule.SessionID
strStationname = AMScriptRule.WinStation
El estándar de Microsoft de esta instancia significa que WinStation devuelve el valor del nombre de la Sesión de servicios terminales, que se determina mediante el tipo de sesión con valores típicos "Consola" o "RDP-Tcp#34", en lugar del nombre de la estación de Window que normalmente es WinSta0.
El objeto COM de AMScriptRule también incluye los métodos siguientes:
strLog = AMScriptRule.Log "Mi extracto de registros"
Le permite emitir las cadenas de inicio de sesión al archivo de registro del agente para que lo use con reglas secuenciadas de depuración.
strEnvironmentvar = AMScriptRule.ExpandEnvironment ("%MyEnvironmentVariables%")
Amplía las variables de entorno del usuario que ejecuta la secuencia.
Usar WScript. la carcasa para ampliar las variables de entorno solo devuelve variables de SISTEMA.
Secuencias de PowerShell de Windows
Si la secuencia devuelve (sale) un valor de 0, la secuencia pasará y se aplicarán las reglas. Si se devuelve otro valor distinto a cero, la secuencia fallará y no se aplicarán las reglas.
Cada secuencia de PowerShell se ejecuta en una instancia de PowerShell.exe y, como tal, Control de aplicaciones no fuerza ni agrega sintaxis específica. Todos los PowerShell correctamente formados funcionarán.
PowerShell debe estar instalado en cualquier punto terminal que usará la secuencia.
Secuencias de muestra
El siguiente VBScript demuestra cómo controlar las aplicaciones a las que tiene acceso un usuario.
Function ScriptedRule()
’Name of Filter scan expected to pass
ExpectedFilter = "FWALL"
’Get Server Name
Set objNTinfo = CreateObject ("WinNTSystemInfo")
ServerName = lcase (objNTInfo.ComputerName)
’Set initial return value
ScriptedRule = False
’Create MetaFrame Session Object
Set MFSession = Createobject ("MetaFrameCOM.MetaFrameSession")
’Initialize the session filters for this session
For Each x in MFSession.SmartAccessFilters
’return true if our filter is found
If x = ExpectedFilter Then
ScriptedRule=True
AMScriptRule.Log "SmartAccessFilter match found."
End If
Next
End Function
El siguiente VBScript se puede utilizar para determinar si un equipo está en una Unidad Organizativa de Equipos:
Function ScriptedRule()
ScriptedRule = vbFalse
strCompName = AMScriptRule.StationName
Set oRootDSE = GetObject("LDAP://RootDSE")
strDNSDomain = oRootDSE.Get("DefaultNamingContext")
Set oOU = GetObject("LDAP://OU=TheOUyouAreSearching,OU=Parent,OU=Parent," & strDNSDomain)
oOU.GetInfo
For each member in oOU
If UCase(strCompName) = UCase(member.CN) Then
ScriptedRule = vbTrue
Exit For
End If
Next
End Function
La siguiente muestra de VBScript muestra los componentes principales de una secuencia y demuestra cómo acceder a la información sobre el nombre de usuario del inicio de sesión del usuario en el sistema, y se combina con un dominio y una unidad organizativa específicos:
Function MyScript()
'Get the username of the user logging in (also works when running as SYSTEM)
strUserName = AMScriptRule.UserName
'Get the domain of the user logging in (also works when running as SYSTEM)
strUserDomain = AMScriptRule.UserDomain
'Look up user environment variables (when running as SYSTEM, only SYSTEM variables are available)
strClientName = AMScriptRule.ExpandEnvironment ("%ClientName%")
'Log the output
AMScriptRule.Log strUserName & " logged in on " & strClientName
'Check if the user is a member of the domain
If strUserdomain = "MyDomain" Then
'If so, see if the user is in the MyOU OU
Set objOU = GetObject ("LDAP://ou=MyOU,dc=MyDomain,dc=com")
objOU.Filter = Array("user")
For Each objUser In objOU
'Check if there is a match with the user logging on
If objUser.sAMAccountName = strUserName Then
'if there is, then set the function to True
MyScript = True
End If
Next
End If
'Unless there is a username match, the function defaults to False
End Function
La siguiente muestra de secuencia de Windows PowerShell muestra los componentes principales de una secuencia y demuestra cómo acceder a la información sobre el nombre de usuario del inicio de sesión del usuario en el sistema, y se combina con un dominio y una unidad organizativa específicos:
#Script checks if the current user is a member of the OU specified
# Return 0 if TRUE
# 1 otherwise
$logonuser = $env:username
$bindpt = [adsi] "LDAP://OU=TS_Users,OU=Users,OU=MyUser,OU=MyOU,DC=MyDomain,DC=com"
$users = New-Object System.DirectoryServices.DirectorySearcher $bindpt
$users.Filter = "(&(objectClass=User)(sAMAccountName=$logonuser))"
$obj = $users.FindOne()
if($obj -eq $null)
{
#" Not a Member"
exit 1
}